نمایش view های مختلف داخل Tab در Bootstrap
با سلام
من میخوام هنگامی که روی یک تب کلیک میکنم یک view داخل همان تب نمایش داده بشه. قطعه کد زیر را دارم:
<ul id="myTab" class="nav nav-tabs" ">
<li class="active">
<a asp-controller="LetterList" asp-action="Index">
<i class="icon-book2"></i><span style="float:right;">لیست نامه ها</span>
</a>
</li>
<li>
<a asp-controller="ArchiveLetterList" asp-action="Index">
<i class="icon-enter5"></i><span>نامه های بایگانی شده</span>
</a>
</li>
</ul>
ولی هنگام کلیک کردن برای نمایش view، کل تب ها حذف میشه و سپس View نمایش داده میشه. به عبارتی view داخل تب نمایش داده نمیشه.
همچنین میخوام هنگام اجرای پروژه تبی که Active هست load بشه. نه اینکه برای نمایش view نیاز به کلیک کردن داشته باشه.
با سپاس
** ویرایش سوال **
ببینید من یک view دارم که قطعه کد زیر داخلش هست و این ویو از یک Layout پیروی میکنه.
<ul id="myTab" class="nav nav-tabs" ">
<li class="active">
<a asp-controller="LetterList" asp-action="Index">
<i class="icon-book2"></i><span style="float:right;">لیست نامه ها</span>
</a>
</li>
<li>
<a asp-controller="ArchiveLetterList" asp-action="Index">
<i class="icon-enter5"></i><span>نامه های بایگانی شده</span>
</a>
</li>
</ul>
<script>
$(function () {
$('#myTab li:eq(1) a').tab('show');
});
</script>
این قطعه کد همان طور که می بینید دو تا تب داره که توی هر کدام از این تب ها یک Action از یک Controller صدا زده میشه.
مشکل اینجاست که هنگام کلیک روی هر کدام از این تب ها، خروجی آن Action در همان تب نمایش داده نمیشه و به این صورت هست که تبها حذف میشند و سپس خروجی آن Action نمایش داده میشه. در صورتی که من میخوام خروجی هر Action داخل محیط تب مربوطه نمایش داده بشه.
همچنین میخوام تبی که به صورت پیش فرض Active هست به طور اتوماتیک load بشه. نه اینکه نیاز به کلیک کردن داشته باشه.
پاسخ هوش مصنوعی
برای اینکه بتوانید ویوهای مختلف را داخل تب ها نمایش دهید و همچنین تب فعال به صورت پیش فرض بارگذاری شود، نیاز دارید که از AJAX استفاده کنید. با این کار، شما محتویات تب را بدون بارگذاری مجدد صفحه و یا حذف سایر تب ها بارگذاری خواهید کرد.
در زیر کد مورد نیاز را مشاهده می کنید:
<ul id="myTab" class="nav nav-tabs">
<li class="active">
<a href="#" data-toggle="tab" class="tab-link" data-url="@Url.Action("Index", "LetterList")">
<i class="icon-book2"></i><span style="float:right;">لیست نامه ها</span>
</a>
</li>
<li>
<a href="#" data-toggle="tab" class="tab-link" data-url="@Url.Action("Index", "ArchiveLetterList")">
<i class="icon-enter5"></i><span>نامه های بایگانی شده</span>
</a>
</li>
</ul>
<div id="tabContent"></div>
<script>
$(document).ready(function(){
loadTabContent($('.tab-link.active'));
$('.tab-link').click(function(e){
e.preventDefault();
loadTabContent($(this));
});
function loadTabContent(link) {
var url = link.data('url');
$('#tabContent').load(url);
$('#myTab li').removeClass('active');
link.parent().addClass('active');
}
});
</script>
در این کد:
- ما از ویژگی
data-url
برای هر لینک تب استفاده کردیم تا URL مرتبط با هر Action مشخص شود. - هنگامی که صفحه بارگذاری می شود، محتوای اولین تب (که فعال است) به صورت پیش فرض بارگذاری می شود.
- با کلیک بر روی هر تب، محتوای مربوط به آن با استفاده از AJAX بارگذاری می شود و محتوای قبلی حذف نمی شود.
مطمین شوید که URL های درون data-url
به درستی به اکشن های کنترلر شما اشاره دارند. این روش به شما اجازه می دهد تا محتوای تب های خود را به راحتی و بدون بارگذاری مجدد صفحه مدیریت کنید.
ببینید این روشی که شما استفاده کردید برای کاری که می خواهید انجام بدید جواب نمیده. دلیلش رو هم میگم خدمتتون.
هر View در Core و در MVC یک آدرس منحصر به فرد خودش رو داره. همونطوری که خود شما کدهای Html رو نوشتید :
<li class="active">
//LetterList/Index
<a asp-controller="LetterList" asp-action="Index">
<i class="icon-book2"></i><span style="float:right;">لیست نامه ها</span>
</a>
</li>
<li>
//ArchiveLetterList/Index
<a asp-controller="ArchiveLetterList" asp-action="Index">
<i class="icon-enter5"></i><span>نامه های بایگانی شده</span>
</a>
</li>
در کد بالا براتون مشخص کردم که هر کدوم از تگ های a شما چه مسیری دارن. در واقع وقتی شما روی یک تگ a کلیک می کنید مسیری که در این تگ مشخص شده صدا زده میشه و پروژه شما به سمت کنترلر مشخص شده و از اونجا Action مشخص شده صدا زده میشه و صفحه رفرش میشه و View صدا زده شده نمایش داده میشه.
بنابراین این انتظار که شما روی تگ های a کلیک کنید بدون اینکه صفحه رفرش بشه و در همون Tab مورد نظر باقی بمونید انتظار صحیحی نیست. برای این کار شما نباید از View های مختلفی استفاده کنید. در واقع باید یک View طراحی کنید و بخش های مختلف رو هم توی همون View داشته باشید و فقط با کلیک کردن روی Tab بخش مورد نظرتون رو hide و یا show کنید.
با سلام
موردی که شما فرمودید یک ویو داشته باشم و همه بخشهای مختلف را دا خل آن انجام بدم درست هست. ولی در نظر بگیرید این صفحه قرار هست مثلا ۱۰ تا تب داشته باشه و هر کدام از این تبها اطلاعات مربوط به یک جدول از دیتابیس را نمایش بده. با توجه به راهی که شما فرمودید هنگام لود شدن صفحه تمام این ۱۰ تب باید به دیتابیس در یک لحظه وصل بشند تا اطلاعات را اماده نمایش داشته باشند تا در صورت کلیک روی تب مربوطه نمایش بدند.
در صورتی که یک بار زیادی روی سرور و زمان زیادی را سمت کلایت برای نمایش میذاره. من میخوام هنگام کلیک رو تب در همان لحظه به جدول مورد نظر وصل شده و اطلاعات را نمایش بده.
با سپاس
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2